“Trabajo práctico #4”

Análisis sobre la base Motor Vehicle Collisions

Fuente: Motor Vehicle Collisions


1 Ficha de la base

Base: Accidentes de tránsito registrados en la Ciudad de Nueva York en los últimos 10 años.

Nombre de base: Motor Vehicle Collisions - Crashes

Fuente: NYC Open Data Periodo de análisis: 07/01/2012 al 26/09/2022.

Frecuencia de actualización: Diaria.

Cantidad total de Filas: 1.931.609

Columnas: 29. Las que aportarían más al análisis serían: Crash Date, Crash Time, Borough, Latitude, Longitude, Numbers of persons (killed, injured), Numbers of pedestrians, (killed, injured), Numbers of cyclists (killed, injured), Numbers of motorist (killed, injured), Contributing factor vehicle (desde 1 hasta 5 autos), Vehicle Type Code (desde 1 hasta 5 autos).

Problemas de la base: Por un lado, hay ciertos datos en la columna de Contributing Factor Vehicle (factores que llevan al choque) que están como “Unspecified”. Si bien es lógico por la naturaleza de los datos, no permiten saber las razones para todos los choques. Hay algunos datos que están en minúscula y en mayúscula, por lo cual habría que corregirlo. Además, en la columna del tipo de vehículo, hay muchos valores que están repetidos con nombres distintos, pero que responden a un mismo concepto (por ejemplo, “Taxi” y “taxi”)

Potencial de la base: con el dataset seleccionado se puede hacer un análisis extenso sobre los accidentes de tránsito en una de las ciudades más importantes y habitadas del mundo. Intentando identificar cómo las relaciones, horarios, razones, tipos de autos involucrados, personas, ciclistas y motociclistas dañados, zonas (Boroughs) se interrelacionan y cuales son (si los hay) los patrones, para poder ayudar de alguna manera a disminuirlos. También se puede analizar cuáles serían los accidentes más típicos, con el objetivo de detectar su frecuencia para disminuirlos. Además, la base contiene datos de los últimos 10 años y se actualiza con frecuencia, por lo que se podría determinar si a lo largo del tiempo los accidentes fueron cambiando (tanto en zonas, razones, personas heridas, etc.)



2 Preguntas para la base

2.1 ¿Cuántos autos se ven involucrados en cada accidente?

c1_boolean = c(is.na(crashes$`VEHICLE TYPE CODE 1`))
c2_boolean = c(is.na(crashes$`VEHICLE TYPE CODE 2`))
c3_boolean = c(is.na(crashes$`VEHICLE TYPE CODE 3`))
c4_boolean = c(is.na(crashes$`VEHICLE TYPE CODE 4`))
c5_boolean = c(is.na(crashes$`VEHICLE TYPE CODE 5`))

funcion_1 <- function(x){
  for(i in (1:length(x))){
    if(x[i]==FALSE){
      x[i]=1
    }else{
      x[i]=0
    }
  }
  return(x)
} 

c1=funcion_1(c1_boolean)
c2=funcion_1(c2_boolean)
c3=funcion_1(c3_boolean)
c4=funcion_1(c4_boolean)
c5=funcion_1(c5_boolean)

vector_suma=c1+c2+c3+c4+c5

crashes$cantidad_autos = vector_suma
fig <- plot_ly(x =~crashes$cantidad_autos,
             type = "histogram") %>% layout(title = 'Cantidad de vehículos involucrados por accidente', xaxis=list(title='Vehículos involucrados'),yaxis = list(title = 'Cantidad de choques'))

fig

Como se puede observar en el gráfico de arriba, en su gran mayoría los choques ocurren entre 2 vehículos distintos. Podemos encontrar que hay 11.381 datos que se corresponde al valor 0, lo cúal es un error en la base y se debe solucionar.


2.2 ¿Cómo fueron evolucionando los choques en la última década?

crashes_year = crashes %>% group_by(year = as.numeric(format(`CRASH DATE`,'%Y')), month = as.numeric(format(`CRASH DATE`,'%m'))) %>% summarise(choques=n()) 

crashes_year %>% ggplot() + geom_smooth(aes(year,choques)) + geom_point(aes(year,choques)) + labs(title='Evolución de accidentes a lo largo del tiempo', x='Año', y='Cantidad de accidentes')

Se puede notar como desde el año 2012 hasta el año 2017 la cantidad de accidentes venía en ascenso. Sin embargo, desde mediados de 2017 el número viene descendiendo, alcanzando sus valores más bajos en el año 2020.


2.3 ¿Cuanta gente sale lesionada como consecuencia de los accidentes? ¿Cuántas muertes generan los mismos?

data = crashes %>% filter(is.na(`NUMBER OF PERSONS INJURED`)==FALSE) %>%  mutate(lesionados = case_when(
  `NUMBER OF PERSONS INJURED`< 1 ~ "No hubo lesionados",
  `NUMBER OF PERSONS INJURED` == 1 ~ "1 lesionado",
  `NUMBER OF PERSONS INJURED`==2 ~ "2 lesionados",
  `NUMBER OF PERSONS INJURED`==3 ~ "3 lesionados",
  `NUMBER OF PERSONS INJURED`==4 ~ "4 lesionados",
  T ~ "5 o mas lesionados")) %>% group_by(lesionados) %>% summarise(cantidad=n())

fig <- plot_ly(data, labels = ~lesionados, values = ~cantidad, type = 'pie')
fig <- fig %>% layout(title = 'Personas heridas en accidentes de transito en el periodo 2012-2022',
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

fig

Se aprecia como en el 78,5% de los accidentes no se reporta ningún lesionado como consecuencia del mismo. Solo en el 16,7% de los mismos una sola persona resulta herida, mientras que en el 4,8% del total de accidentes hay 3 lesionados o más.

data_2 = crashes %>% filter(is.na(`NUMBER OF PERSONS KILLED`)==FALSE) %>%  mutate(muertos = case_when(
  `NUMBER OF PERSONS KILLED`== 0 ~ "No hubo muertos",
  T ~ "Hubo muertos")) %>% group_by(muertos) %>% summarise(cantidad=n())

fig2 <- plot_ly(data_2, labels = ~muertos, values = ~cantidad, type = 'pie')
fig2 <- fig2 %>% layout(title = 'Personas fallecidas en accidentes de transito en el periodo 2012-2022',
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

fig2

El índice de mortalidad en los accidentes es realmente bajo. Del total de accidentes, en el 0,133% hay al menos una persona fallecida como consecuencia del mismo.


2.4 ¿Cuál es el barrio donde ocurren mayor cantidad de choques?

crashes %>% group_by(BOROUGH) %>% summarise(cant = n()) 

#Hay muchos NA, pero vamos a analizar los datos que tenemos

crasheswna = crashes %>% filter(!is.na(BOROUGH)) 

crashes4 = crashes %>% filter(!is.na(BOROUGH)) %>% group_by(BOROUGH) %>% summarise(cant = n(), per = cant/length(crasheswna$BOROUGH))
  
crashes4 = data.frame(crashes4)
ggplot(crashes4, aes(fill = BOROUGH, y = per, x = BOROUGH)) + geom_bar(position='stack', stat='identity') + coord_flip() + labs(title="Barrios con mayor cantidad de accidentes de transito", x='Borough', y='Porcentaje')

En los barrios de Brooklyn y Queens se registran mayores casos de accidentes de tránsito. El primer barrio contiene poco más del 30% de los datos, mientras que el segundo se lleva poco más del 25%. En Staten Island es donde se registran los números más bajos, donde los accidentes representan menos del 5% del total.


2.5 ¿Qué tipos de vehículos son los que están más involucrados?

crashes5 = crashes %>% stack(select=c(`VEHICLE TYPE CODE 1`,`VEHICLE TYPE CODE 2`,`VEHICLE TYPE CODE 3`,`VEHICLE TYPE CODE 4`,`VEHICLE TYPE CODE 5`)) %>% filter(!is.na(values)) %>% group_by(values)%>% summarise(cant = n()) %>% arrange(., cant)

crashes5 = tail(crashes5, 10)

ggplot(crashes5, aes(y = values, x = cant, fill = values)) + geom_bar(position='stack', stat='identity') + labs(title="Tipos de vehiculos que causan mayor cantidad de accidentes", x='Cantidad de accidentes', y='Tipo de vehiculo')

Los autos catalogados como “Sedan” y “Sport Utility vehicle” son aquellos que protagonizan mayor cantidad de accidentes. Sin embargo, se puede notar que tanto camiones, taxis y camionetas también figuran como los vehículos que más accidentes causan.

Por otro lado, se aprecian dos errores en la base con respecto a esta informacion.

En primer lugar, hay muchos valores que figuran como “unknown”, cuando en realidad debería haber por lo menos un tipo de vehículo que protagoniza un accidente de tránsito.

Además, se nota como hay muchos valores que figuran más de una vez pero con distinto orden o nombre (por ejemplo “Sedan” y “4 dr sedan” podrían ser el mismo vehículo). Esta información debería ser ordenada para poder llegar a una conclusión más certera.


2.6 ¿Qué factor es el más común en los accidentes? Es decir, ¿por qué se provocan?

crashes6 = crashes %>% stack(select=c(`CONTRIBUTING FACTOR VEHICLE 1`, `CONTRIBUTING FACTOR VEHICLE 2`, `CONTRIBUTING FACTOR VEHICLE 3`, `CONTRIBUTING FACTOR VEHICLE 4`, `CONTRIBUTING FACTOR VEHICLE 5`)) %>% filter(!is.na(values)) %>% group_by(values)%>% summarise('Causa de los accidentes' = n())

library(treemap)
p = treemap(crashes6, index="values",
            vSize="Causa de los accidentes",
            type="index")

Se puede notar, al igual que en el análisis previo, que en poco más de la mitad de los accidentes no se detecta una causa. En aquellos en los que sí se le puede atribuir una causa al mismo se destacan las distracciones de los conductores, el hecho de no ceder el paso al vehículo de la derecha, o también el hecho de circular muy cercano a otro vehículo.


3 Contexto

3.1 Una epidemia de violencia vial recorre las calles de Nueva York con cifras récord de siniestralidad

Algunos radares de la ciudad se desconectan por la noche y en los fines de semana, provocando mayores accidentes viales.


3.2 Pagarían por delatar conductores que violen leyes en Nueva York

Se propone pagar a las personas que delaten conductas que violen las leyes de tránsito.


3.3 Nueva York sufre demasiados atropellos mortales por culpa de los SUV. La solución política: que sean más seguros (y más caros)

El Estado de Nueva York reconoce que tiene un problema de seguridad vial, poniendo en riesgo principalmente a peatones y ciclistas. Una solucion pensada es hacer obligatorios ciertos sistemas de asistencia a la conducción para los vehículos de mayor tamaño (como los SUV, que son considerados los autos mas letales).